/*
 * 用户登录状态模块
 * 用于管理用户登录状态和登录弹窗的显示/隐藏
 */
export default {
  // 状态定义：存储模块的数据
  state: {
    user: "", // 存储当前登录用户的信息，初始为空表示未登录
    showLogin: false, // 控制登录组件是否显示，false表示默认隐藏
  },
  // 计算属性：获取state的派生状态
  getters: {
    /**
     * 获取当前用户信息
     * @param {Object} state 模块的state对象
     * @return {Object} 当前用户信息
     */
    getUser(state) {
      return state.user;
    },

    /**
     * 获取登录组件显示状态
     * @param {Object} state 模块的state对象
     * @return {Boolean} 是否显示登录组件
     */
    getShowLogin(state) {
      return state.showLogin;
    },
  },

  // 同步修改state的方法，唯一可以修改state的方法
  mutations: {
    /**
     * 设置用户信息
     * @param {Object} state 模块的state对象
     * @param {Object} data 要设置的用户数据
     */
    setUser(state, data) {
      state.user = data;
    },
    /**
     * 设置登录组件显示状态
     * @param {Object} state 模块的state对象
     * @param {Boolean} data 是否显示登录组件
     */
    setShowLogin(state, data) {
      state.showLogin = data;
    },
  },
  // 异步操作：可以包含异步逻辑，必须要通过mutation来修改state
  actions: {
    /**
     * 异步设置用户信息
     * @param {Object} context 包含commit方法的上下文对象
     * @param {Object} data 要设置的用户数据
     */

    setUser({ commit }, data) {
      commit("setUser", data); // 提交mutation来更新状态
    },
    /**
     * 异步设置登录组件显示状态
     * @param {Object} context 包含commit方法的上下文对象
     * @param {Boolean} data 是否显示登录组件
     */
    setShowLogin({ commit }, data) {
      commit("setShowLogin", data); // 提交mutation来更新状态
    },
  },
};
